package com.wang.tool.extension;

/**
 * 扩展点选择器
 *
 * @Author wangshaopeng
 * @Date 2022/5/14
 */
@FunctionalInterface
public interface ExtensionSelector<T extends ExtensionScene> {

    /**
     * 选择实现
     *
     * @param extensionType    调用的是哪个扩展点接口 非空
     * @param scene            扩展场景 可能为空
     * @param extensionLibrary 扩展仓库 非空
     * @return 返回空则认为是未找到扩展实现,返回returnType的默认值
     * @see ExtensionFactory.DEF_NAME
     */
    Object selectImpl(Class<?> extensionType, T scene, ExtensionFactory.ExtensionLibrary extensionLibrary);
}
